package cc.zy.base.hr.mapper;

import cc.zy.base.hr.entity.Staff;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author ljy
 * @time 2022/03/09 10:18:23
 */
@Repository
public interface StaffMapper  extends BaseMapper<Staff> {

    /**
     * 查找员工详细信息
     *
     * @param page    分页对象
     * @param staff 用户对象，用于传递查询条件
     * @return Ipage
     */
    <T> IPage<Staff> getStaffDetailPage(Page<T> page, @Param("staff") Staff staff);

    /**
     * 统计员工的总数
     * @param staff
     * @return
     */
    long countStaffDetail(@Param("staff") Staff staff);

    /**
     * 获得常量对应字典中的id
     * @param constant
     * @return
     */
    Integer getConstantId(@Param("constant") String constant);

    /**
     * 根据用户名判断员工是否已存在
     * @param staff
     * @return
     */
    Staff staffExist(@Param("staff")Staff staff);

    /**
     * 根据用户名修改员工信息
     * @param staff
     */
    void updateStaffByUserId(@Param("staff")Staff staff);

    /**
     * 获取员工最近同步时间
     * @return
     */
    Date getUpdateTime();

    List<String> getAllStaffUserIdList();

    void deleteStaffByUserId(@Param("userId")String userId);

    // 二组选择员工通用组件相关
    /**
     *
     *
     * @param page  分页对象
     * @param staff 用户对象，用于传递查询条件
     * @return Ipage
     */
    <T> IPage<Staff> findStaffDetailPage(Page<T> page, @Param("staff") Staff staff);

    long countStaffDetailForSelect(@Param("staff") Staff staff);

    /**
     * @param name  院校全称
     * @param alias 院校简称
     * @return
     */
    List<Staff> isRepetitive(@Param("name") String name, @Param("alias") String alias);

    /**
     * @Author: WBR
     * @Description: 根据标签查询员工
     * @DateTime: 2022/3/11 17:05
     * @Params: [page, staff]
     * @Return com.baomidou.mybatisplus.core.metadata.IPage<cc.zy.base.hr.entity.Staff>
     */
    <T> IPage<Staff> findStaffDetailPageByLel(Page<T> page, @Param("staff") Staff staff);

    long countStaffDetailByLabel(@Param("staff") Staff staff);

    /**
     * @Author: WBR
     * @Description: 查询标签id
     * @DateTime: 2022/3/11 17:05
     * @Params: []
     * @Return java.util.List<cc.zy.base.hr.entity.Staff>
     */
    List<Staff> selectStaffForSelect();
}
